package com.qiujie.util;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.qiujie.config.HolidayConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;


@Component
public class DatetimeUtil {

    @Autowired
    private HolidayConfig holidayConfig;

    /**
     * 获取月份的日期字符串数据组如，['20220101','20220102','20220103',........]
     *
     * @param month yyyyMM
     * @return
     */
    public String[] getMonthDayList(String month) {
        // 解析当前月份（示例输入：202401）
        DateTime currentMonth = DateUtil.parse(month + "01", "yyyyMMdd");

        // 计算起始日期（当月23日）
        DateTime startDate = DateUtil.beginOfMonth(currentMonth).offset(DateField.DAY_OF_MONTH, 22); // 1日 +22天=23日

        // 计算结束日期（次月22日）
        DateTime endDate = DateUtil.offsetMonth(startDate, 1).setField(DateField.DAY_OF_MONTH, 22);

        // 处理次月不足22天的情况（如二月）
        if(endDate.getField(DateField.DAY_OF_MONTH) != 22){
            endDate = DateUtil.endOfMonth(endDate);
        }

        // 生成日期区间
        int dayCount = DateUtil.dayOfMonth(endDate) - 22 + 23;
        if(currentMonth.isAfter(startDate)){ // 处理传入月份在调整后区间的情况
            dayCount = DateUtil.dayOfMonth(endDate);
        }

        List<String> dayList = new ArrayList<>();
        DateTime tempDate = startDate;
        while(tempDate.isBeforeOrEquals(endDate)){
            dayList.add(DateUtil.format(tempDate, "yyyyMMdd"));
            tempDate = DateUtil.offsetDay(tempDate, 1);
        }
        return dayList.toArray(new String[0]);
    }


    /**
     * 判断当前日期是否是节假日
     *
     * @param date
     * @return
     */
    public boolean isHoliday(Date date) {
        String str = DateUtil.format(date, "yyyy-MM-dd");
        return holidayConfig.getHolidays().contains(str);
    }
}
